package main

import "fmt"

type Animal2 interface {
	Eat2()
	Sleep2()
	Life2() string
}

type Cat2 struct {
	name string
	age  int
}

func (cat Cat2) Eat2() {
	fmt.Printf("小猫-%s 爱吃>鱼 \n", cat.name)
}

func (cat Cat2) Sleep2() {
	if cat.age > 18 {
		fmt.Printf("小猫-%s 今年>%d岁 睡了8小时\n", cat.name, cat.age)
	} else {
		fmt.Printf("小猫-%s 今年才%d岁 未成年 要睡10小时\n", cat.name, cat.age)
	}
}

func (cat Cat2) Life2() string {
	return "小猫住在主人家"
}

// 如果参数为接口类型则实现接口方法的接收者都必须为值接收
func PrintOut2(animal Animal2) {
	_, ok := animal.(Animal2)
	if !ok {
		fmt.Println("该生物没有实现动物接口")
	} else {

		// 仅限接口方法没有参数
		animal.Eat2()
		animal.Sleep2()
		fmt.Println(animal.Life2())
	}

}

func main() {
	cat := Cat2{name: "Tom", age: 9}
	PrintOut2(cat)
}
